// 铺地毯
#include <iostream>
using namespace std;
int n;
const int N = 1e4 + 10;
struct Carpet
{
    int a, b, x, y;
}carpet[N];
bool st[N];

// 找到最大的覆盖目标点的地毯的编号
int find(int x, int y)
{
    for(int i = n;i >= 1;i--)
    {
        if(x >= carpet[i].a && y >= carpet[i].b
            && x <= carpet[i].a + carpet[i].x && y <= carpet[i].b + carpet[i].y)
            {
                return i;
            }
    }

    return -1;
}
int main()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        int a, b, g, k;
        cin >> a >> b >> g >> k;
        carpet[i].a = a;
        carpet[i].b = b;
        carpet[i].x = g;
        carpet[i].y = k;
    }

    int x, y;
    cin >> x >> y;

    // 正序枚举能过，但是不是最优策略
    // for(int i = 1;i <= n;i++)
    // {
    //     if(x >= carpet[i].a && y >= carpet[i].b
    //         && x <= carpet[i].a + carpet[i].x && y <= carpet[i].b + carpet[i].y)
    //         {
    //             st[i] = true;
    //         }
    // }

    // 最优策略为从后往前枚举
    int ret = find(x, y);

    cout << ret << endl;
    return 0;
}